package org.dromara.lessor.domain.vo;

import java.math.BigDecimal;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.admin.domain.ContractBill;
import org.dromara.admin.domain.GeneralConfig;
import org.dromara.admin.domain.Order;
import org.dromara.admin.domain.vo.ContractBillVo;
import org.dromara.admin.domain.vo.GeneralConfigVo;
import org.dromara.admin.domain.vo.OrderVo;
import org.dromara.lessor.domain.House;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;


/**
 * 房源信息视图对象 hr_house
 *
 * @author Lion Li
 * @date 2025-09-01
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = House.class)
public class HouseVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 房源ID
     */
    @ExcelProperty(value = "房源ID")
    private Long id;

    /**
     * 出租方id
     */
    @ExcelProperty(value = "出租方ID")
    private Long lessorId;

    /**
     * 业务员id
     */
    @ExcelProperty(value = "业务员ID")
    private Long saleId;

    /**
     * 房产证照片路径
     */
    @ExcelProperty(value = "房产证照片路径")
    private String propertyCertPhoto;

    /**
     * 房产号
     */
    @ExcelProperty(value = "房产号")
    private String propertyNumber;

    /**
     * 房屋封面url
     */
    @ExcelProperty(value = "房屋封面url")
    private String houseUrl;

    /**
     * 房屋状态: 待审核,通过,驳回
     */
    @ExcelProperty(value = "房屋状态: 待审核,通过,驳回")
    private String houseStatus;

    /**
     * 是否上架（Y:上架、N:下架）
     */
    @ExcelProperty(value = "是否上架（Y:上架、N:下架）")
    private String isLaunch;

    /**
     * 身份证照片路径
     */
    @ExcelProperty(value = "身份证照片路径")
    private String idCardPhoto;

    /**
     * 姓名
     */
    @ExcelProperty(value = "姓名")
    private String ownerName;

    /**
     * 身份证号
     */
    @ExcelProperty(value = "身份证号")
    private String idCardNumber;

    /**
     * 省
     */
    @ExcelProperty(value = "省")
    private String province;

    /**
     * 市
     */
    @ExcelProperty(value = "市")
    private String city;

    /**
     * 详细地址
     */
    @ExcelProperty(value = "详细地址")
    private String address;

    /**
     * 租房类型: 房屋,写字楼,厂房
     */
    @ExcelProperty(value = "租房类型: 房屋,写字楼,厂房")
    private String rentalType;

    /**
     * 楼盘名称
     */
    @ExcelProperty(value = "楼盘名称")
    private String estateName;

    /**
     * 门牌号
     */
    @ExcelProperty(value = "门牌号")
    private String houseNumber;

    /**
     * 楼层
     */
    @ExcelProperty(value = "楼层")
    private Long floor;

    /**
     * 房屋面积
     */
    @ExcelProperty(value = "房屋面积")
    private String houseArea;

    /**
     * 房屋朝向
     */
    @ExcelProperty(value = "房屋朝向")
    private Long houseOrientation;

    /**
     * 房屋户型
     */
    @ExcelProperty(value = "房屋户型")
    private Long houseLayoutId;

    /**
     * 电器
     */
    @ExcelProperty(value = "电器")
    private String electricalIds;

    private List<GeneralConfigVo> electricalList;
    /**
     * 合同开始日期
     */
    @ExcelProperty(value = "合同开始日期")
    private Date contractStartDate;

    /**
     * 合同结束日期
     */
    @ExcelProperty(value = "合同结束日期")
    private Date contractEndDate;

    /**
     * 合同照片路径
     */
    @ExcelProperty(value = "合同照片路径")
    private String contractPhoto;

    /**
     * 合同状态: 待审核,通过,驳回
     */
    @ExcelProperty(value = "合同状态: 待审核,通过,驳回")
    private String contractStatus;

    /**
     * 房源照片路径(多个用逗号分隔)
     */
    @ExcelProperty(value = "房源照片路径(多个用逗号分隔)")
    private String housePhotos;

    /**
     * 租金(每期价格)
     */
    @ExcelProperty(value = "租金(每期价格)")
    private BigDecimal rent;

    /**
     * 租期: 3,6,9,12个月
     */
    @ExcelProperty(value = "租期: 3,6,9,12个月")
    private Long leaseTerm;

    /**
     * 开始时间
     */
    @ExcelProperty(value = "开始时间")
    private Date startDate;

    /**
     * 订单模式: 6个月(垫资)
     */
    @ExcelProperty(value = "订单模式: 6个月(垫资)")
    private String orderMode;

    /**
     * 代扣模式: 蚂蚁链,周期扣,免押+周期扣
     */
    @ExcelProperty(value = "代扣模式: 蚂蚁链,周期扣,免押+周期扣")
    private String deductionMode;

    /**
     * 押金
     */
    @ExcelProperty(value = "押金")
    private BigDecimal deposit;

    /**
     * 租客身份证正面照片
     */
    @ExcelProperty(value = "租客身份证正面照片")
    private String tenantIdCardFront;

    /**
     * 租客身份证反面照片
     */
    @ExcelProperty(value = "租客身份证反面照片")
    private String tenantIdCardBack;

    /**
     * 租客身份证号
     */
    @ExcelProperty(value = "租客身份证号码")
    private String tenantIdCardNumber;

    /**
     * 租客手机号
     */
    @ExcelProperty(value = "租客手机号")
    private String tenantPhone;

    /**
     * 租客签约合同路径
     */
    @ExcelProperty(value = "租客签约合同路径")
    private String tenantContract;

    /**
     * 租客支付宝蚂蚁信用分截图
     */
    @ExcelProperty(value = "租客支付宝蚂蚁信用分截图")
    private String tenantAlipayCredit;

    /**
     * 房东打款视频路径
     */
    @ExcelProperty(value = "房东打款视频路径")
    private String landlordPaymentVideo;

    /**
     * 非房东本人代理委托书路径
     */
    @ExcelProperty(value = "非房东本人代理委托书路径")
    private String nonLandlordPayment;

    /**
     * 无代理委托书（视频能体现4笔或1年长期打款记录）
     */
    @ExcelProperty(value = "无代理委托书", converter = ExcelDictConvert.class)
    private String longTermPaymentProof;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

    /**
     * 创建时间
     */
    private Date createTime;

    private OrderVo order;

    private List<ContractBillVo> contractBills;

    /**
     * 通用配置房屋
     */
    private GeneralConfig generalConfig;

    /**
     * 头像 url
     */
    private String avatar;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 手机号码
     */
    private String phonenumber;

    /**
     * 租客信息
     */
    private SysUserVo tenantUser;
    /**
     * 出租方信息
     */
    private SysUserVo lessorUser;
    /**
     * 资方代理信息
     */
    private SysUserVo capitalUser;

}
